﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Marin.Entities;

namespace Marin.Repository
{
    public class CuentaRepository:MasterRepository,ICuentaRepository
    {
        public List<Cuenta> GetAllFromCuentas()
        {
            var query = from p in Context.Cuentas
                        .Include("Categoria")
                select p;
            return query.ToList();

        }

        public List<Cuenta> GetAllFromCuentasByCriterio(string criterio = "", DateTime? fechaInicio = null, DateTime? fechaFin = null)
        {
            var query = from p in Context.Cuentas
                        .Include("Categoria")
                        select p;


            if (!string.IsNullOrEmpty(criterio))
            {
                query = from p in query
                        where
                            p.Descripcion.ToUpper().Contains(criterio.ToUpper()) ||
                            p.Categoria.Descripcion.ToUpper().Contains(criterio.ToUpper()) 
                        select p;
            }
            return query.ToList();
        }

        public Cuenta GetFromCuentaById(int id)
        {
            var query = from p in Context.Cuentas
                        .Include("Categoria")
                        select p;
            if (id!=null)
            {
                query = from p in query
                    where p.Id.Equals(id)
                    select p;
            }
            return query.SingleOrDefault();
        }

        public void AddCuenta(Cuenta cuenta)
        {
            var newCuenta =new Cuenta();
            newCuenta.IdCategoria = cuenta.IdCategoria;
            
            newCuenta.Descripcion = cuenta.Descripcion;
            newCuenta.Precio = cuenta.Precio;
            

            
            Context.Cuentas.Add(newCuenta);
            Context.SaveChanges();
        }

        public void UpdateCuenta(Cuenta cuenta)
        {
            Context.Entry(cuenta).State= EntityState.Modified;
            Context.SaveChanges();
        }

        public void RemoveCuenta(int id)
        {
            var existe = Context.Cuentas.Find(id);

            if (existe!=null)
            {
                Context.Cuentas.Remove(existe);
                Context.SaveChanges();
            }
        }
    }
}
